package exercises;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 苏李涛
 * Date: 2024-07-09
 * Time: 22:16
 */
/*
合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。



示例 1：


输入：l1 = [1,2,4], l2 = [1,3,4]
输出：[1,1,2,3,4,4]
示例 2：

输入：l1 = [], l2 = []
输出：[]
示例 3：

输入：l1 = [], l2 = [0]
输出：[0]
 */
public class Exercises4 {

    static class ListNode{
        public int val;
        public ListNode next;

    }

    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {

        //Exercises4.ListNode静态内部类访问
        Exercises4.ListNode headH = new ListNode();
        Exercises4.ListNode tmp = headH;//tmp用来遍历两个链表
        while(list1 != null && list2 != null) {
            //哪个节点数据小，就接在tmp后面
            if(list1.val < list2.val) {
                tmp.next = list1;
                list1 = list1.next;
                tmp = tmp.next;
            }else {
                tmp.next = list2;
                list2 = list2.next;
                tmp = tmp.next;
            }
        }

        //当其中一个链表遍历完，就直接接上另一个链表的后半部分
        if(list1 != null) {
            tmp.next = list1;
        }

        if(list2 != null) {
            tmp.next = list2;
        }

        return headH.next;
    }
}
